/**
 * 公共的service方法
 * @type {{getDictionary: commonService.getDictionary}}
 */
var CommonService = {

    /**
     *根据数据字典分组码，获取字典项
     * @param groupCode 分组码
     * @param callback 回调
     */
    getDictionary: function (groupCode, callback) {
        var dic = LocalCacheManager.getCacheDic(groupCode);
        if (dic) {
            callback(dic);
        } else {
            Http.getSync(PlatformAPI.getUrl("getDictionary"), {
                groupCode: groupCode
            }, function (res) {
                if (typeof callback === "function") {
                    try {
                        var result = eval("(" + res + ")");
                        callback(result.data);
                    } catch (e) {
                        console.log(e);
                        logger.log(res);
                        logger.error("获取或处理字典项：" + groupCode + "失败！");
                    }
                }
            });
        }
    },
    /**
     * 根据数据字典分组码，获取字典项，可一次性获取多个分组中的字典项
     * @param groupCodes 分组码数组
     * @param callback 回调
     */
    getDictionarys: function (groupCodesArra, callback) {
        var dics = LocalCacheManager.getCacheDic(groupCodesArra);
        if (dics) {
            callback(dics);
        } else {
            var groupCodes = groupCodesArra.join(",");
            Http.getSync(PlatformAPI.getUrl("getDictionarys"), {
                groupCodes: groupCodes
            }, function (res) {
                if (typeof callback === "function") {
                    try {
                        var result = eval("(" + res + ")");
                        callback(result.data);
                    } catch (e) {
                        console.log(e);
                        logger.log(res);
                        logger.error("获取或处理字典项失败！");
                    }
                }
            });
        }
    },
    /**
     * 获取省份列表
     * @param bigRegion 大区，不传入则获取所有省份
     * @param callback 回调函数
     */
    getProvince: function (bigRegion, callback) {
        Http.getSync(PlatformAPI.getUrl("cityList"), {
            pageSize: 100000,
            levelType: 1,
            region: CommonConst.BIGREGIONS[bigRegion]
        }, function (res) {
            if (typeof callback === "function") {
                try {
                    var result = eval("(" + res + ")");
                    callback(result.data.list);
                } catch (e) {
                    console.log(e);
                    logger.log(res);
                    logger.error("获取或处理" + (bigRegion ? (bigRegion + "下") : "") + "省份列表失败！");
                }
            }
        });
    },
    /**
     *
     * 根据父id和级别获取
     * @param pId 父级Id
     * @param levelType 级别：1、省/直辖市,2、市,3、区县
     * @param callback 回调函数
     */
    getChildrenCityList: function (pId, levelType, callback) {
        Http.getSync(PlatformAPI.getUrl("cityList"), {
            pageSize: 100000,
            pId: pId,
            levelType: levelType
        }, function (res) {
            if (typeof callback === "function") {
                try {
                    var result = eval("(" + res + ")");
                    callback(result.data.list);
                } catch (e) {
                    console.log(e);
                    logger.log(res);
                    logger.error("获取或处理" + (levelType == 1 ? "省份" : (levelType == 2 ? "城市" : "区县")) + "数据失败！");
                }
            }
        });
    },
    /**
     * 根据级别获取
     * @param levelType 级别：1、省/直辖市,2、市,3、区县
     * @param callback 回调函数
     */
    getCityListByLevelType: function (levelType, callback) {
        Http.getSync(PlatformAPI.getUrl("cityList"), {
            pageSize: 100000,
            levelType: levelType
        }, function (res) {
            if (typeof callback === "function") {
                try {
                    var result = eval("(" + res + ")");
                    callback(result.data.list);
                } catch (e) {
                    console.log(e);
                    logger.log(res);
                    logger.error("获取或处理" + (levelType == 1 ? "省份" : (levelType == 2 ? "城市" : "区县")) + "数据失败！");
                }
            }
        });
    },
    /**
     * 根据Id获取
     * @param id id值
     * @param callback 回调函数
     */
    getCityById: function (id, callback) {
        Http.getSync(PlatformAPI.getUrl("cityList"), {
            pageSize: 1,
            id: id
        }, function (res) {
            if (typeof callback === "function") {
                try {
                    var result = eval("(" + res + ")");
                    callback(result.data.list);
                } catch (e) {
                    console.log(e);
                    logger.log(res);
                    logger.error("获取或处理省份列表失败！");
                }
            }
        });
    },

    /**
     * 加载省份
     * @param bigRegion 大区，不传入则获取所有省份
     * @param provinceId 省份下拉列表框Id
     * @param cityId 城市下拉列表框Id
     * @param countyId 区县下拉列表框Id
     * @param defaultVal 默认值
     * @param isShowFirstOption 是否显示第一行提示信息
     */
    loadPrincesForSelect: function (bigRegion, provinceId, cityId, countyId, defaultVal, isShowFirstOption) {
        var fag = isShowFirstOption == false;
        if (fag) {
            $("#" + provinceId).html("");
            $("#" + cityId).html("");
            $("#" + countyId).html("");
        } else {
            $("#" + provinceId).html("<option value=\"\">请选择省份</option>").val("").select2("val", "");
            $("#" + cityId).html("<option value=\"\">请选择城市</option>").val("").select2("val", "");
            $("#" + countyId).html("<option value=\"\">请选择区县</option>").val("").select2("val", "");
        }
        var $select = $("#" + provinceId);
        CommonService.getProvince(bigRegion, function (data) {
            CommonService.setCitySelectOption($select, data, fag ? undefined : "请选择省份", defaultVal);
        });
    },

    /**
     * 加载城市
     * @param pId 父级Id
     * @param cityId 城市下拉列表框Id
     * @param countyId 区县下拉列表框Id
     * @param defaultVal 默认值
     * @param isShowFirstOption 是否显示第一行提示信息
     */
    loadCitysForSelect: function (pId, cityId, countyId, defaultVal, isShowFirstOption) {
        var fag = isShowFirstOption == false;
        if (fag) {
            $("#" + cityId).html("");
            $("#" + countyId).html("");
        } else {
            $("#" + cityId).html("<option value=\"\">请选择城市</option>").val("").select2("val", "");
            $("#" + countyId).html("<option value=\"\">请选择区县</option>").val("").select2("val", "");
        }
        var $select = $("#" + cityId);
        CommonService.getChildrenCityList(pId, 2, function (data) {
            CommonService.setCitySelectOption($select, data, fag ? undefined : "请选择城市", defaultVal);
        });
    },

    /**
     * 加载区县
     * @param pId 父级Id
     * @param countyId 区县下拉列表框Id
     */
    loadCountysForSelect: function (pId, countyId, defaultVal) {
        var $select = $("#" + countyId);
        CommonService.getChildrenCityList(pId, 3, function (data) {
            CommonService.setCitySelectOption($select, data, "请选择区县", defaultVal);
        });
    },
    /**
     * 设置城市下拉列表的option
     * @param $select 城市下拉列表jquery 对象
     * @param data 数据
     * @param firstOptionText 第一个option显示的文本,如果不传入，则不显示第一个option
     * @param defaultVal 默认值
     */
    setCitySelectOption: function ($select, data, firstOptionText, defaultVal) {
        var options = firstOptionText ? ('<option value="">' + firstOptionText + '</option>') : "";
        data.map(function (c) {
            options += '<option value="' + c.id + '">' + c.name + '</option>';
        });
        $select.html(options);
        if (defaultVal) {
            CommonService.setSelectVal($select, defaultVal);
        }
    },
    /**
     * 下拉列表选中指定的值
     * @param $select
     * @param defaultVal
     */
    setSelectVal: function ($select, defaultVal) {
        $select.val(defaultVal);
        try {
            $select.select2('val', defaultVal)
        } catch (e) {
        }
    },
    /**
     * 文件上传后只是缓存文件形式存储，服务器会定时清理临时文件。
     * 调用此方法可将文件同步到文件服务器永久保存
     *
     * @param option 参数key如下：
     *      tableName               必须      业务表表名
     *      primaryKeyFieldName     必须      业务表主键字段名
     *      businessId              必须      业务表id值
     *      fileRelevances          必须      文件关联字符串。格式为：分组名1=>需要使用文件的字段名1,分组名2=>需要使用文件的字段名2...
     *      delteFileIds            可选      业务表不需要再继续使用的文件id,多个值用逗号隔开
     *      oldValue                可选      业务表需要使用文件的原来的值,多个值用逗号隔开
     * @param successCallback 成功的回调
     * @param errorCallback 失败的回调
     */
    useFile: function (option, successCallback, errorCallback) {
        var params = {
            tableName: null,
            primaryKeyFieldName: null,
            businessId: null,
            fileRelevances: null,
            delteFileIds: null,
            oldValue: null
        };
        $.extend(params, option);
        if (params.tableName && params.primaryKeyFieldName && params.businessId && params.fileRelevances) {
            Http.getSync("fileUpload/useFile.do", params, function (result) {
                if (typeof successCallback === "function") {
                    successCallback(result);
                } else {
                    logger.error("使用文件成功!");
                }
            }, function () {
                if (typeof errorCallback === "function") {
                    errorCallback();
                } else {
                    logger.error("使用文件失败!");
                }
            }, "json");
        } else {
            alert("参数错误,无法使用上传的缓存文件!");
        }
    },
    /**
     * 解析图片字段
     * @param obj 对象
     * @param fields 需要解析的字段数组
     */
    parsePicturePath: function (obj, fields) {
        if ($.isArray(obj)) {
            for (var i = 0, len = obj.length; i < len; i++) {
                CommonService.parsePicturePath(obj[i], fields);
            }
        } else {
            for (var i = 0, lenI = fields.length; i < lenI; i++) {
                var fieldName = fields[i];//字段
                try {
                    var files = JSON.parse(obj[fieldName]);
                    var fileIds = new Array();// 文件Id
                    for (var j = 0, lenJ = files.length; j < lenJ; j++) {
                        var file = files[j];
                        fileIds.push(file.id);
                    }
                    obj[fieldName] = files;
                    obj[fieldName + "FileIds"] = fileIds.join(",");
                } catch (e) {
                }
            }
        }
    },
    /**
     * 显示数据导入中心
     * @param title 标题
     * @param uploadUrl 上传路径
     */
    showImportDataCenterDialog: function (title, uploadUrl) {
        bootbox.dialog({
            title: title,
            message: '<iframe src="switchView.do?viewPath=sysPage/ums/common/importDataCenter.ftl&uploadUrl=' + encodeURIComponent(uploadUrl) + '" width="100%" height="400" style="border:none;padding:0px; margin:0px;"></iframe>',
            buttons: false
        });
    }
};
